]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
lookingGlass: Stop using eval()
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 30 Nov 2018 15:57:47 +0000 (16:57 +0100)
committerFlorian Müllner <florian.muellner@gmail.com>
Tue, 22 Jan 2019 21:33:46 +0000 (21:33 +0000)
Its use is not only strongly discouraged[0], we also rely on it injecting
variables into the global scope to get command-line-like behavior. That
behavior is incompatible with strict mode[1], and in extension with ES6
classes (which imply strict mode).

So to prepare for porting to ES6 classes, replace it with a somewhat less
evil construct that is compatible with strict mode.

[0] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Do_not_ever_use_eval!
[1]
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode#Simplifying_variable_uses

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/350

js/ui/lookingGlass.js

index 34c60cb651745361adb807acce1f335f9bfbd3fd..186b53ce3bb874467622db943b85474ebbf9740a 100644 (file)
@@ -1003,11 +1003,14 @@ var LookingGlass = new Lang.Class({
     _evaluate(command) {
         this._history.addItem(command);
 
-        let fullCmd = commandHeader + command;
+        let lines = command.split(';');
+        lines.push(`return ${lines.pop()}`);
+
+        let fullCmd = commandHeader + lines.join(';');
 
         let resultObj;
         try {
-            resultObj = eval(fullCmd);
+            resultObj = Function(fullCmd)();
         } catch (e) {
             resultObj = '<exception ' + e + '>';
         }